package com.ruoyi.yf.service;

import com.ruoyi.system.domain.SysUser;
import com.ruoyi.yf.domain.*;
import com.ruoyi.yf.domain.mobile.NoOutBoxInfo;

import java.util.Date;
import java.util.List;

public interface IYfDisposeService {

    // 根据条码获取医废信息
    YfTag getYFInfoByYfCode(String codeId);

    // 根据条码查询医废
    YfTag selectYfTagByCodeId(String codeId);

    // 查询未出库的医废列表
    List<YfTag> getNoOutStoreYFlistByStagingId(Long userId, Long stagingId, Long ksId, String day);

    // 医废装箱，只有10 -> 20
    void yfBoxing(String codeId, String boxCode, Long userId, Date date);

    // 取消医废装箱，只有20 -> 10
    void yfUnBox(String codeId, Long userId);

    // 根据装箱码查询箱内医废
    List<YfTag> getYFByBoxCode(Long userId, Long hospitalId, Long stagingId, String boxCode);

    // 查询未装箱袋数、重量；装箱未出库袋数、重量、箱数
    NoOutBoxInfo getNoOutBoxInfo(Long userId, Long hospitalId, Long stagingId);

    // 查询已装箱未出库箱子列表
    List<YfBox> getBoxedNoOutBoxList(Long userId, Long hospitalId, Long stagingId);

    // 封箱
    void sealingBox(Long userId, String boxCode, Date date);

    // 根据箱码查询箱码内统计
    YfBox getInBoxYFPrintByBoxCode(Long userId, String boxCode);

    // 根据暂存点id获取未装箱医废
    List<YfTag> getNoBoxedYFByStagingId(Long userId, Long stagingId, Long ksId, String day);

    // 查询封箱未装车箱子列表
    List<YfBox> getSealingBoxedNoOutBoxList(Long userId, Long hospitalId, Long stagingId);

    // 按暂存点查询当天出库箱子列表
    List<YfBox> getTodayOutYFBoxList(Long userId, Long hospitalId, Long stagingId);

    // 获取医废车列表
    List<YfTruck> getYFTruckList(Long userId, Long disposalId);

    // 按医废车及押运员查询当天装车箱子列表
    List<YfBox> getTodayTruckedYFBoxList(Long userId, Long disposalId, Long truckId);

    // 取消医废箱装车
    void yfBoxUnTruck(Long userId, Long disposalId, String boxCode);

    // 根据箱码查询医废箱
    YfBox selectYfBoxByBoxCode(String boxCode);

    // 医废箱装车
    void yfBoxTrucking(Long userId, Long disposalId, Long truckId, String boxCode, Date date);

    // 巡检根据箱码查询医废箱信息
    YfBox getYFBoxInfoByBoxCode(String codeId);

    // 扫描诊所科室码查询诊所及科室信息
    YfDept getDeptInfoByScanCode(String deptId);

    // 查询当天处置公司去诊所收集医废汇总
    List<YfClinic> getCZTodayClinicYFTotal(Long userId, Long disposalId);

    // 获取当前用户收集未装箱装车医废列表
    List<YfTag> getCollNoTruckYFByCollUserId(Long userId, Long disposalId, String yftype);

    // 诊所医废封箱打印
    int saveCollToTruckYFlist(List<YfTag> yfList, Long userId, Long disposalId, Long truckId, String boxCode, Date date);

    // 查询处置公司去诊所收医废未装箱汇总及今天封箱汇总
    NoOutBoxInfo getCZClinicBoxYFTotal(Long userId, Long disposalId);

    // 查询诊所收集未装箱医废列表 - 重复打印
    List<YfTag> getClinicCollYF(Long userId, Long disposalId, Long ksId, String day);

    // 根据押运员查询当天去医院收医废汇总
    List<YfBox> getCZTodaHospitalYFTotal(Long userId, Long disposalId);

    // 根据押运员查询今日诊所医废封箱列表
    List<YfBox> getTodayClinicSealingBoxList(Long userId, Long disposalId);

    // 根据装箱码查询箱内诊所医废
    List<YfTag> getClinicYFByBoxCode(Long userId, Long disposalId, String boxCode);

    // 根据押运员查询今天装车医废箱列表
    List<YfBox> getTodayTruckYFBoxListByUserId(Long userId, Long disposalId, Long hospitalId);

    // 获取押运员今日诊所收集医废汇总及报零
    List<YfBox> getClinicTodayYFTotalAndZeroByCollUserId(Long userId, Long disposalId);

    // 医疗机构报零
    void ClinicCollZeroByUserId(Long userId, String userName, Long disposalId, Long hospitalId);

    // 根据医院医废箱码查询箱内医废
    List<YfTag> getHospitalBoxYFListByBoxCode(Long userId, Long disposalId, String boxCode);

    // 根据扫描二维码查询医院信息
    YfBox getHospitalByhospitalId(Long hospitalId);

    // 查询医院未装车医废箱列表
    List<YfBox> getHospitalNoTruckYFBoxList(Long userId, Long disposalId, Long hospitalId);

    // 查询医院已收集未装箱医废
    List<YfTag> getCollNoBoxYFByHospitalId(Long userId, Long disposalId, Long hospitalId);

    // 查询诊所今日收集医废
    List<YfTag> getClinicTodayYFListByClinicId(Long userId, Long disposalId, Long hospitalId);

    // 诊所医废装箱装车
    void clinicYFBoxingAndTrucking(String codeId, String boxCode, Long userId, Long disposalId,
                                   Long truckId, Date date);

    // 取消诊所医废装箱，只有30 -> 10
    void clinicYFUnBox(String codeId, Long userId);

    // 查询诊所今日已装箱及全部未封箱医废箱列表
    List<YfBox> getClinicTodayBoxedYFAndNoSealingBoxList(Long userId, Long disposalId, Long truckId);

    // 根据押运员查询当天去诊所装箱医废汇总
    NoOutBoxInfo getCZClinicTodaYFTotal(Long userId, Long disposalId);

    // 查询诊所未装箱医废列表
    List<YfTag> getClinicNoTruckYFList(Long userId, Long disposalId, Long hospitalId);

    // 获取押运员今日诊所装箱医废汇总及报零
    List<YfBox> getClinicTodayBoxedYFTotalAndZero(Long userId, Long disposalId);

    // 根据押运员查询诊所今日装箱医废
    List<YfTag> getClinicTodayOutYFListByClinicId(Long userId, Long disposalId, Long hospitalId);

    // 根据医院id查询医院信息
    YfDept getHospitalInfoByHospitalId(Long userId, String code);

    // 查看医院医废出库量
    List<YfBox> getHospitalYFOutTotal(Long userId, Long disposalId, Long hospitalId, String startDate, String endDate);

    // 根据二维码查询医废车
    YfTruck getTruckByCode(Long userId, Long disposalId, String truckId);

    // 根据二维码查询押运员
    SysUser getTruckerByCode(Long userId, Long disposalId, Long truckerId);


    // 入库 -> 出库装车
    void inStoreToOutStoreToTruckYF(String codeId, Long userId, Long truckId, Long truckerId);

    // 一键出库装车
    void oneKeyOutStoreToTruckYF(Long stagingId, Long userId, Long truckId, Long truckerId);

    // 科室医废出库装车
    void oneKSInToOutStoreToTruckYF(Long stagingId, Long ksId, Long userId, Long truckId, Long truckerId);

    // 选择出库装车
    int saveOutStoreToTruckYFlist(List<YfTag> yfList, Long userId, Long truckId, Long truckerId);

    // 查询1吨医废正负偏差值
    int getOneTonWeightDeviation();

    // 扫描医疗机构码查询医疗机构及医废暂存点信息
    YfDept getHospitalAndStagingInfoByScanCode(Long userId, String deptId);

    // 处置公司批量上传医废接口
    int czcompanyBatchSaveYF(List<YfTag> yflist);

    // 根据处置公司用户及医废车及医疗机构查询医废(按出库用户)
    List<YfTag> getHospitalTodayYFListByUserAndTruckAndHospital(Long userId, Long disposalId, Long truckId, Long hospitalId);

    // 根据押运员查询当天填报医院医废汇总
    List<YfBox> getCZTBTodayHospitalYFTotal(Long userId, Long disposalId);

    // 根据押运员及医废车查询医院装车医废列表
    List<YfBox> getTodayOneTruckedYFTotalByTruckerFill(Long userId, Long disposalId, Long truckId);

    // 查询医废车上未卸车0的医废是否有无箱码的情况
    int getIsTruckYFAllHaveBoxCodeByTruck(Long userId, Long disposalId, Long truckId);

    // 查询车上未卸车或未转车医废
    YfBox getTruckedYFByTruckId(Long userId, Long disposalId, Long truckId);

    // 查询车上未卸车或未转车医废箱详情
    List<YfBox> getTruckedYFTotalOrBoxListByTruckId(Long userId, Long disposalId, Long truckId);

    // 小车剩余医废全部装入医废运输车
    void smallTruckYFInBigTruck(Long userId, Long disposalId, Long smallTruckId, Long bigTruckId);

    // 按箱小车医废装入大车
    void smallTruckOneBoxYFInBigTruck(Long userId, Long disposalId, Long smallTruckId, Long bigTruckId, String boxCode);
}
